package com.inossem.utils.base;


import java.math.BigDecimal;
import java.text.DecimalFormat;

public class ArithUtil{
	private static final int DEF_DIV_SCALE=10;
	
	private ArithUtil(){}
	
	private static DecimalFormat    df   = new DecimalFormat("######0.000"); 

	
	public static double add(double d1,double d2){
		BigDecimal b1=new BigDecimal(Double.toString(d1));
		BigDecimal b2=new BigDecimal(Double.toString(d2));
		double doubleValue = b1.add(b2).doubleValue();
		return doubleValue;
		
	}

	public static double add(String d1,String d2){
		BigDecimal b1=new BigDecimal(d1);
		BigDecimal b2=new BigDecimal(d2);
		double doubleValue = b1.add(b2).doubleValue();
		return doubleValue;

	}
	
	
	public static String add2String(double d1,double d2){
		double doubleValue = add(d1,d2);
		return df.format(doubleValue);
	}
	
	public static String sub2String(double d1,double d2){
		double doubleValue = sub(d1,d2);
		return df.format(doubleValue);
	}
	
	public static double sub(double d1,double d2){
		BigDecimal b1=new BigDecimal(Double.toString(d1));
		BigDecimal b2=new BigDecimal(Double.toString(d2));
		return b1.subtract(b2).doubleValue();
		
	}
	
	public static double mul(double d1,double d2){
		BigDecimal b1=new BigDecimal(Double.toString(d1));
		BigDecimal b2=new BigDecimal(Double.toString(d2));
		return b1.multiply(b2).doubleValue();
		
	}
	
	public static double div(double d1,double d2){

		return div(d1,d2,DEF_DIV_SCALE);
		
	}
	
	public static double div(double d1,double d2,int scale){
		if(scale<0){
			throw new IllegalArgumentException("The scale must be a positive integer or zero");
		}
		BigDecimal b1=new BigDecimal(Double.toString(d1));
		BigDecimal b2=new BigDecimal(Double.toString(d2));
		return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
		
	}
	
	
	public static int compare(String d1,String d2){
		d1 = StringUtil.isEmpty(d1)?"0":d1.trim();
		d2 = StringUtil.isEmpty(d2)?"0":d2.trim();
		BigDecimal b1=new BigDecimal(d1);
		BigDecimal b2=new BigDecimal(d2);
		double doubleValue = b1.subtract(b2).doubleValue();
		if(doubleValue>0){
			return 1;
		}else if(doubleValue==0){
			return 0;
		}else{
			return -1;
		}
	}
	
	public static void main(String[] args) {
		System.out.println(ArithUtil.compare("1","2"));
		System.out.println(ArithUtil.compare("1","1"));
		System.out.println(ArithUtil.compare("2","1"));
		System.out.println(ArithUtil.compare("",""));
		System.out.println(ArithUtil.compare("1",""));
		System.out.println(ArithUtil.compare(null,""));
		
		System.out.println(ArithUtil.compare("3.000 ","0.000 "));
	}
	
}